/**
 * 反转单向链表
*/
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    /**
     * 实现思路：
     * 1. 定义一个变量 pre 用于存储前一个节点
     * 2. 定义一个变量 cur 用于存储当前节点
     * 3. 定义一个变量 next 用于存储下一个节点
     * 4. 遍历链表，将当前节点的 next 指向 pre，然后将 pre、cur、next 分别向后移动一位
     */
    let pre = null,
        cur = head,
        next = null;
    /**
     * 1 -> 2 -> 3 -> 4 -> 5
     * 1 <- 2 <- 3 <- 4 <- 5
     * next = cur.next  代表下一个节点
     * cur.next = pre  代表当前节点的 next 指向前一个节点
     * pre = cur  代表前一个节点指向当前节点
     * cur = next  代表当前节点指向下一个节点
     * 上述四步操作的顺序不能颠倒，否则会导致链表断裂
     */
    while(cur) {
        next = cur.next
        cur.next = pre
        pre = cur
        cur = next
    }    
    return pre
};